package com.ruoyi.security.service.impl;

import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.SecurityUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.omp.api.RemoteJobService;
import com.ruoyi.omp.api.domain.SysJob;
import com.ruoyi.security.domain.MaintainOrder;
import com.ruoyi.security.mapper.MaintainOrderMapper;
import com.ruoyi.security.service.IMaintainOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 维护计划Service业务层处理
 *
 * @author zmc
 * @date 2021-12-21
 */
@Service
public class MaintainOrderServiceImpl implements IMaintainOrderService {
    @Autowired
    private MaintainOrderMapper maintainOrderMapper;

    @Autowired
    private RemoteJobService remoteJobService;

    /**
     * 查询维护计划
     *
     * @param id 维护计划ID
     * @return 维护计划
     */
    @Override
    public MaintainOrder selectMaintainOrderById(String id) {
        return maintainOrderMapper.selectMaintainOrderById(id);
    }

    /**
     * 查询维护计划列表
     *
     * @param maintainOrder 维护计划
     * @return 维护计划
     */
    @Override
    public List<MaintainOrder> selectMaintainOrderList(MaintainOrder maintainOrder) {
        return maintainOrderMapper.selectMaintainOrderList(maintainOrder);
    }

    /**
     * 新增维护计划
     *
     * @param maintainOrder 维护计划
     * @return 结果
     */
    @Transactional
    @Override
    public int insertMaintainOrder(MaintainOrder maintainOrder) {
        maintainOrder.setId(IdUtil.getSnowflake(0, 0).nextIdStr());
        maintainOrder.setCreateTime(DateUtils.getNowDate());
        maintainOrder.setCreateBy(SecurityUtils.getUsername());
        int rows = maintainOrderMapper.insertMaintainOrder(maintainOrder);
        //insertMaintainItem(maintainOrder);
        //根据计划添加Job
        remoteJobService.addJob(createJob(maintainOrder));
        return rows;
    }

    private SysJob createJob(MaintainOrder maintainOrder){
        SysJob sysJob = new SysJob();
        sysJob.setJobName(maintainOrder.getScheduleName());
        sysJob.setJobGroup("DEFAULT");
        sysJob.setInvokeTarget("scheduleTask.createScheduleTask('" +maintainOrder.getId() +"')");
        sysJob.setCronExpression(maintainOrder.getScheduleType());
        sysJob.setMisfirePolicy("3");
        sysJob.setStatus(maintainOrder.getState());
        sysJob.setConcurrent("1");
        return sysJob;
    }

    /**
     * 修改维护计划
     *
     * @param maintainOrder 维护计划
     * @return 结果
     */
    @Transactional
    @Override
    public int updateMaintainOrder(MaintainOrder maintainOrder) {
        maintainOrder.setUpdateTime(DateUtils.getNowDate());
        maintainOrder.setUpdateBy(SecurityUtils.getUsername());
        //maintainOrderMapper.deleteMaintainItemByFormId(maintainOrder.getId());
        //insertMaintainItem(maintainOrder);
        // 根据计划更新Job
        if(StringUtils.isNotBlank(maintainOrder.getState()) || StringUtils.isNotBlank(maintainOrder.getScheduleType()) ){
            remoteJobService.editJob(createJob(maintainOrder));
        }
        return maintainOrderMapper.updateMaintainOrder(maintainOrder);
    }

    /**
     * 批量删除维护计划
     *
     * @param ids 需要删除的维护计划ID
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteMaintainOrderByIds(String[] ids) {
        //maintainOrderMapper.deleteMaintainItemByFormIds(ids);
        // 根据计划删除Job
        //remoteJobService.removeJob(ids);
        return maintainOrderMapper.deleteMaintainOrderByIds(ids);
    }

    /**
     * 删除维护计划信息
     *
     * @param id 维护计划ID
     * @return 结果
     */
    @Override
    public int deleteMaintainOrderById(String id) {
        //maintainOrderMapper.deleteMaintainItemByFormId(id);
        return maintainOrderMapper.deleteMaintainOrderById(id);
    }

    /**
     * 新增维护单项信息
     *
     * @param maintainOrder 维护计划对象
     */
//    public void insertMaintainItem(MaintainOrder maintainOrder) {
//        List<MaintainItem> maintainItemList = maintainOrder.getMaintainItemList();
//        String id = maintainOrder.getId();
//        if (StringUtils.isNotNull(maintainItemList)) {
//            List<MaintainItem> list = new ArrayList<MaintainItem>();
//            for (MaintainItem maintainItem : maintainItemList){
//                maintainItem.setFormId(id);
//                list.add(maintainItem);
//            }
//            if (list.size() > 0) {
//                maintainOrderMapper.batchMaintainItem(list);
//            }
//        }
//    }
}
